package com.company.common.util;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.safety.Whitelist;

/**
 * @author RenZeMin
 * @date 2021/7/23 17:41
 */
public class HtmlUtils {

    //去除文本的html标签 并且截取前100个字符
    public static String getTextFromTHML(String htmlStr) {
        Document doc = Jsoup.parse(htmlStr);
        String text = doc.text();
        // remove extra white space
        StringBuilder builder = new StringBuilder(text);
        int index = 0;
        while(builder.length()>index){
            char tmp = builder.charAt(index);
            if(Character.isSpaceChar(tmp) || Character.isWhitespace(tmp)){
                builder.setCharAt(index, ' ');
            }
            index++;
        }
        text = builder.toString().replaceAll(" +", " ").trim();
        String substring;
        if(text.length()>100){
            substring = text.substring(0,100);
        }else{
            substring = text.substring(0,text.length());
        }
        return substring;
    }

    // 只有纯文本可以通过
    public static String getText(String html) {
        if (html == null) {
            return null;
        }
        return Jsoup.clean(html, Whitelist.none()).replace("&nbsp;", "");
    }

    // 以下标签可以通过
// b, em, i, strong, u. 纯文本
    public static String getSimpleHtml(String html) {
        if (html == null) {
            return null;
        }
        return Jsoup.clean(html, Whitelist.simpleText());
    }

    // 以下标签可以通过
//a, b, blockquote, br, cite, code, dd, dl, dt, em, i, li, ol, p, pre, q, small, strike, strong, sub, sup, u, ul
    public static String getBasicHtml(String html) {
        if (html == null) {
            return null;
        }
        return Jsoup.clean(html, Whitelist.basic());
    }

    //在basic基础上 增加图片通过
    public static String getBasicHtmlandimage(String html) {
        if (html == null) {
            return null;
        }
        return Jsoup.clean(html, Whitelist.basicWithImages());
    }

    // 以下标签可以通过
    //a, b, blockquote, br, caption, cite, code, col, colgroup, dd, dl, dt, em, h1, h2, h3, h4, h5, h6, i, img, li, ol, p, pre, q, small, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, u, ul
    public static String getFullHtml(String html) {
        if (html == null) {
            return null;
        }
        return Jsoup.clean(html, Whitelist.relaxed());
    }

    //只允许指定的html标签
    public static String clearTags(String html, String... tags) {
        Whitelist wl = new Whitelist();
        return Jsoup.clean(html, wl.addTags(tags));
    }

    // 对关键字加上颜色
//    public static String markKeywods (String keywords, String target) {
//        if (StringKit.notBlank(keywords)) {
//            String[] arr = keywords.split(" ");
//            for (String s : arr) {
//                if (StringKit.notBlank(s)) {
//                    String temp = "<span class=\"highlight\">" + s + "</span>";
//                    if(temp!=null)
//                        target = target.replaceAll(s, temp);
//                }
//            }
//        }
//        return target;
//    }

    // 获取文章中的img url
    public static String getImgSrc(String html) {
        if (html == null) {
            return null;
        }
        Document doc = Jsoup.parseBodyFragment(html);
        Element image = doc.select("img").first();
        return image == null ? null : image.attr("src");
    }
}
